package br.com.virtual.cadastrar.service.impl;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.inject.Inject;

import br.com.virtual.base.enums.ActionFormEnum;
import br.com.virtual.base.exceptions.VirtualValidationException;
import br.com.virtual.cadastrar.dao.PessoaDAO;
import br.com.virtual.cadastrar.model.Endereco;
import br.com.virtual.cadastrar.model.Pessoa;
import br.com.virtual.cadastrar.model.Produto;
import br.com.virtual.cadastrar.model.Usuario;
import br.com.virtual.cadastrar.service.EnderecoService;
import br.com.virtual.cadastrar.service.PessoaService;
import br.com.virtual.cadastrar.service.UsuarioService;
import br.com.virtual.vender.model.Interesse;
import br.com.virtual.vender.service.InteresseService;

@Stateless
@Local(PessoaService.class)
public class PessoaServiceImpl implements PessoaService {

	@Inject
	private PessoaDAO pessoaDAO;

	@EJB
	private InteresseService interesseService;

	@EJB
	private UsuarioService usuarioService;
	
	@EJB
	private EnderecoService enderecoService;

	@Override
	public Pessoa findByEmail(String email) {
		return pessoaDAO.findByEmail(email);
	}

	@Override
	public Pessoa read(Long id) {
		return this.pessoaDAO.read(id);
	}

	@Override
	public List<Pessoa> list() {
		return this.pessoaDAO.list();
	}

	@Override
	public List<Pessoa> listToShow() {
		return this.pessoaDAO.listToShow();
	}

	@Override
	public void delete(Pessoa pessoa) {

		this.pessoaDAO.delete(pessoa);
		;
	}

	@Override
	public List<String> getEmailListToNews() {
		return this.pessoaDAO.getEmailListToNews();
	}

	@Override
	public Interesse persistirInteresse(Interesse interesse, ActionFormEnum actionForm) {

		if (interesse != null ) {
			if (actionForm.equals(ActionFormEnum.CREATE)
					|| actionForm.equals(ActionFormEnum.UPDATE))
				interesse = interesseService.update(interesse);
			else if (actionForm.equals(ActionFormEnum.DELETE)){
				interesseService.delete(interesse);
				return null;
			}
		}
		
		return interesse;
	}

	@Override
	public Usuario persistirUsuario(Usuario usuario, ActionFormEnum actionForm) {

		try {

			if (usuario != null) {
				if (actionForm.equals(ActionFormEnum.CREATE)
						|| actionForm.equals(ActionFormEnum.UPDATE))

					return usuarioService.update(usuario);

				else if (actionForm.equals(ActionFormEnum.DELETE))
					usuarioService.delete(usuario);
					
			}

		} catch (VirtualValidationException e) {
			e.printStackTrace();
		}
		
		return null;
	}

	@Override
	public void persistirEnderecos(List<Endereco> enderecos, ActionFormEnum actionForm) {

		try {

			if (enderecos != null && actionForm.equals(ActionFormEnum.DELETE))
				for(Endereco endereco : enderecos)
					enderecoService.delete(endereco);

			
		} catch (VirtualValidationException e) {
			e.printStackTrace();
		}
	}

	@Override
	public Pessoa loadAvaliacao(Pessoa pessoa) {
		return this.pessoaDAO.loadAvaliacao(pessoa);
	}

	@Override
	public List<Pessoa> getCandidatosASemelhante(List<Produto> produtosAvaliados) {
		
		
		
		return this.pessoaDAO.getCandidatosASemelhante(produtosAvaliados);
	}
	
}
